import type { FilterCondition } from "@/data/wbsFields.ts";

export interface ResponseBaseBody<T> {
  pageNo?: number;
  pageSize?: number;
  result?: T[];
  total?: number;
  [property: string]: any;
}

/**
 * SearchRequest
 */
export interface ProjectSearchRequest {
  conditions?: QueryCondition[] | FilterCondition[];
  logic?: string;
  pageNo?: number;
  pageSize?: number;
  sortParams?: SortParam[];
  [property: string]: any;
}

/**
 * QueryCondition
 */
export interface QueryCondition {
  field: string;
  operator?: string;
  value: { [key: string]: any };
  [property: string]: any;
}

/**
 * SortParam
 */
export interface SortParam {
  asc?: boolean;
  field?: string;
  [property: string]: any;
}

/**
 * Task VO
 */
export interface TaskVo {
  /**
   * 实际工期(天)  为空时计算
   */
  actualDurationDay?: number;
  /**
   * 实际结束时间
   */
  actualEndTime?: Date;
  /**
   * 实际工时
   */
  actualHours?: number;
  /**
   * 实际开始时间
   */
  actualStartTime?: Date;
  /**
   * 子任务列表
   */
  childrenTaskList?: TaskVo[];
  /**
   * 编号
   */
  code?: string;
  /**
   * 项目详情里评论
   */
  commentVoList?: CommentVo[];
  createTime?: Date;
  creator?: string;
  creatorName?: string;
  /**
   * 创建人
   */
  creatorObject?: ProjectMember;
  /**
   * 负责人
   */
  curator?: ProjectMember;
  /**
   * 执行人
   */
  executors?: ProjectMember[];
  /**
   * 图标
   */
  icon?: string;
  id?: string;
  /**
   * 剩余工时
   */
  leftHours?: number;
  /**
   * 当前节点（迁移,状态节点的成熟度,项目进度)
   */
  lifecycleCurrentNode?: LifecycleNode;
  /**
   * 项目状态=生命周期状态(映射到五个最终状态)
   */
  lifecycleStatus?: string;
  /**
   * 里程碑名字
   */
  milestoneName?: string;
  modifier?: string;
  modifierName?: string;
  modifyTime?: Date;
  /**
   * 名称
   */
  name?: string; // { [key: string]: string };
  /**
   * 父任务id
   */
  parentTaskId?: string;
  /**
   * 计划工期(天) 为空时计算
   */
  plannedDurationDay?: number;
  /**
   * 计划结束时间
   */
  plannedEndTime?: Date;
  /**
   * 计划工时
   */
  plannedHours?: number;
  /**
   * 计划开始时间
   */
  plannedStartTime?: Date;
  /**
   * 优先级（待定）
   */
  priority?: number;
  /**
   * 归属项目id
   */
  projectId?: string;
  /**
   * 项目详情里动态
   */
  projectUpdatesVoList?: ProjectUpdate[];
  /**
   * 归属项目
   */
  projectVO?: ProjectVo;
  /**
   * 描述
   */
  remark?: string;
  /**
   * 软件工具
   */
  software?: string;
  /**
   * 归属的任务类型id
   */
  taskTypeId?: string;
  /**
   * 归属的任务类型
   */
  taskTypeVO?: TaskTypeVo;
  tenantId?: string;
  [property: string]: any;
}

/**
 * type
 */
export enum PATHTYPE {
  All = "ALL",
  Archived = "ARCHIVED",
  Curator = "CURATED",
  Favorite = "FAVORITE",
  Participated = "PARTICIPATED",
  Unarchived = "UNARCHIVED",
}

/**
 * Project VO
 *
 * 归属项目
 */
export interface ProjectVo {
  /**
   * 实际工期(天)  为空时计算
   */
  actualDurationDay?: number;
  /**
   * 实际结束时间
   */
  actualEndTime?: Date;
  /**
   * 实际开始时间
   */
  actualStartTime?: Date;
  /**
   * 子任务列表
   */
  childrenTaskList?: TaskVo[];
  /**
   * 编号
   */
  code?: string;
  /**
   * 封面
   */
  cover?: string;
  createTime?: Date;
  creator?: string;
  /**
   * 创建人归属部门
   */
  creatorDept?: { [key: string]: string };
  creatorName?: string;
  /**
   * 创建人
   */
  creatorObject?: ProjectMember;
  /**
   * 图标
   */
  icon?: string;
  id?: string;
  /**
   * 当前节点（迁移,状态节点的成熟度,项目进度)
   */
  lifecycleCurrentNode?: { [key: string]: any };
  /**
   * 生命周期模型
   */
  lifecycleModel?: { [key: string]: any };
  /**
   * 项目状态=生命周期状态(映射到五个最终状态)
   */
  lifecycleStatus?: string;
  modifier?: string;
  modifierName?: string;
  modifyTime?: Date;
  /**
   * 名称
   */
  name?: { [key: string]: string };
  /**
   * 计划工期(天) 为空时计算
   */
  plannedDurationDay?: number;
  /**
   * 计划结束时间
   */
  plannedEndTime?: Date;
  /**
   * 计划开始时间
   */
  plannedStartTime?: Date;
  /**
   * 优先级（待定）
   */
  priority?: number;
  /**
   * 项目进度
   */
  progress?: string;
  /**
   * 项目详情里公告的数据
   */
  projectAnnouncementVoList?: ProjectAnnouncementVo[];
  /**
   * 项目成员
   */
  projectMemberVOList?: ProjectMember[];
  /**
   * 项目详情里里程碑的数据
   */
  projectMilestoneVoList?: ProjectMilestoneData[];
  /**
   * 项目详情里的任务方面的数据
   */
  projectTaskVo?: TaskStatsVo;
  /**
   * 归属的项目类型id
   */
  projectTypeId?: string;
  /**
   * 项目详情里动态
   */
  projectUpdatesVoList?: ProjectUpdate[];
  /**
   * 描述
   */
  remark?: string;
  /**
   * 项目角色json
   */
  roles?: string;
  /**
   * 任务生命周期模型集合(id:model)
   */
  taskLifecycleModelList?: string[];
  /**
   * 封面 模板id
   */
  templateId?: string;
  tenantId?: string;
  [property: string]: any;
}

/**
 * Comment VO
 */
export interface CommentVo {
  createTime?: Date;
  creator?: string;
  creatorName?: string;
  id?: string;
  modifier?: string;
  modifierName?: string;
  modifyTime?: Date;
  tenantId?: string;
  /**
   * 操作描述
   */
  text?: string;
  [property: string]: any;
}

/**
 * 创建人 / 项目成员 / 负责人
 */
export interface ProjectMember {
  /**
   * 头像
   */
  avatar?: string;
  /**
   * 用户id
   */
  id?: string;
  /**
   * 用户id名
   */
  name?: string;
  /**
   * 角色id
   */
  roleId?: string;
  /**
   * 角色名
   */
  roleName?: { [key: string]: string };
  [property: string]: any;
}

/**
 * 当前节点（迁移,状态节点的成熟度,项目进度)
 *
 * Lifecycle Node
 */
export interface LifecycleNode {
  /**
   * 映射码
   */
  code?: Code;
  /**
   * 颜色
   */
  color?: string;
  /**
   * id
   */
  id?: string;
  /**
   * 审核中
   */
  isAuditing?: boolean;
  /**
   * 多语言名称
   */
  name?: { [key: string]: string };
  /**
   * 成熟度
   */
  progress?: number;
  [property: string]: any;
}

/**
 * 映射码
 */
export enum Code {
  Cancel = "CANCEL",
  Creator = "CREATOR",
  Finish = "FINISH",
  Leader = "LEADER",
  New = "NEW",
  NewProcessingFinishCancelPause = "NEW,PROCESSING,FINISH,CANCEL,PAUSE",
  Pause = "PAUSE",
  Processing = "PROCESSING",
  Worker = "WORKER",
}

/**
 * 项目动态
 */
export interface ProjectUpdate {
  /**
   * 操作描述
   */
  actionDetail?: { [key: string]: string };
  createTime?: Date;
  creator?: string;
  creatorName?: string;
  id?: string;
  modifier?: string;
  modifierName?: string;
  modifyTime?: Date;
  tenantId?: string;
  [property: string]: any;
}

/**
 * 归属的任务类型
 *
 * 任务类型VO
 */
export interface TaskTypeVo {
  createTime?: Date;
  creator?: string;
  creatorName?: string;
  /**
   * 创建人
   */
  creatorObject?: ProjectMember;
  id?: string;
  modifier?: string;
  modifierName?: string;
  modifyTime?: Date;
  /**
   * 名称
   */
  name?: { [key: string]: string };
  /**
   * 描述
   */
  remark?: string;
  /**
   * 项目来源  EXTERNAL/INTERNAL
   */
  source?: Source;
  /**
   * 给任务关联的生命周期id
   */
  taskLifecycleId?: string;
  tenantId?: string;
  [property: string]: any;
}

/**
 * 项目来源  EXTERNAL/INTERNAL
 */
export enum Source {
  External = "EXTERNAL",
  Internal = "INTERNAL",
}

/**
 * 项目公告VO
 */
export interface ProjectAnnouncementVo {
  createTime?: Date;
  creator?: string;
  creatorName?: string;
  id?: string;
  modifier?: string;
  modifierName?: string;
  modifyTime?: Date;
  tenantId?: string;
  /**
   * 公告文本
   */
  text?: string;
  [property: string]: any;
}

/**
 * 项目详情里里程碑数据
 */
export interface ProjectMilestoneData {
  createTime?: Date;
  creator?: string;
  creatorName?: string;
  id?: string;
  /**
   * 里程碑名
   */
  milestoneName?: string;
  modifier?: string;
  modifierName?: string;
  modifyTime?: Date;
  tenantId?: string;
  [property: string]: any;
}

/**
 * 项目详情里的任务方面的数据
 *
 * 任务统计VO
 */
export interface TaskStatsVo {
  createTime?: Date;
  creator?: string;
  creatorName?: string;
  /**
   * 完成的任务数量（计算完成率）
   */
  finishTaskCount?: number;
  id?: string;
  modifier?: string;
  modifierName?: string;
  modifyTime?: Date;
  tenantId?: string;
  /**
   * 本月任务数量
   */
  thisMonthTaskCount?: number;
  [property: string]: any;
}

/**
 * SearchRequest
 */
export interface TemplatesSearchRequest {
  conditions?: QueryCondition[];
  logic?: string;
  pageNo?: number;
  pageSize?: number;
  sortParams?: SortParam[];
  [property: string]: any;
}

/**
 * QueryCondition
 */
export interface QueryCondition {
  field: string;
  operator?: string;
  value: { [key: string]: any };
}

/**
 * SortParam
 */
export interface SortParam {
  asc?: boolean;
  field?: string;
}

/**
 * PageResult<ProjectTemplateVO>
 */
export interface PageResultProjectTemplateVO {
  pageNo?: number;
  pageSize?: number;
  result?: ProjectTemplateVO[];
  total?: number;
  [property: string]: any;
}

/**
 * ProjectTemplateVO
 */
export interface ProjectTemplateVO {
  /**
   * 使用本模板的项目id
   */
  childProjectIdList?: string[];
  /**
   * 封面
   */
  cover?: string;
  createTime?: Date;
  creator?: string;
  creatorName?: string;
  /**
   * 创建人对象
   */
  creatorObject?: ProjectMember;
  id?: string;
  modifier?: string;
  modifierName?: string;
  modifyTime?: Date;
  /**
   * 名称
   */
  name?: { [key: string]: string };
  /**
   * 引用来源项目的id
   */
  projectId?: string;
  /**
   * 描述
   */
  remark?: string;
  /**
   * 软件工具
   */
  software?: string;
  /**
   * 启用状态
   */
  status?: Status;
  tenantId?: string;
  [property: string]: any;
}

/**
 * 创建人对象
 *
 * 项目成员
 */
// duplicate ProjectMember removed; use the above definition

/**
 * 启用状态
 */
export enum Status {
  Disable = "DISABLE",
  Normal = "NORMAL",
}

/**
 * MetadataConfigEntityRes
 */
export interface MetadataConfigEntityRes {
  /**
   * 是否选中
   */
  checked?: number;
  /**
   * 选中后文本
   */
  checkedText?: string;
  createTime?: Date;
  creator?: string;
  creatorName?: string;
  /**
   * 默认值
   */
  defaultValue?: string;
  deleted?: string;
  /**
   * 是否禁用
   */
  disable?: number;
  /**
   * 字段名
   */
  field?: string;
  i18nColumnMap?: { [key: string]: { [key: string]: any } };
  id?: string;
  /**
   * 是否显示
   */
  invisible?: number;
  /**
   * 跳转链接
   */
  linkJump?: string;
  modifier?: string;
  modifierName?: string;
  modifyTime?: Date;
  /**
   * 显示中文名
   */
  name?: string;
  /**
   * 序号
   */
  no?: number;
  /**
   * 选项值
   */
  options?: string;
  /**
   * 页面
   */
  pageKey?: string;
  /**
   * 验证规则
   */
  rules?: string;
  tenantId?: string;
  /**
   * 字段类型
   */
  type?: string;
  /**
   * 未选中文本
   */
  uncheckedText?: string;
  [property: string]: any;
}
